import json
from datetime import datetime

from django.shortcuts import render,redirect
from django.http import HttpResponse
# Create your views here.
from django.urls import reverse


def index(request):
    '''
    登录成功后跳转到首页
    注册成功后跳转到首页
    '''
    # return redirect('/index/')
    # 如果include加了namespace，reverse就要加上，namespace:name
    # path=reverse('index')
    # return redirect(path)

    return HttpResponse('index')

def detail(request,a,b):
    # 关键字
    # a,b是关键字参数

    # 查询
    # query_params是查询参数
    # query_params=request.GET
    # # querydict以普通的字典形式，只能获取最后的一个值
    # # 获取一键多值需求getlist,一键一直使用get
    # # username=query_params['id']
    # # password=query_params['pas']
    # username=query_params.get('id')
    # password=query_params.getlist('pas')

    # post
    # post_params=request.POST
    # username=post_params.get('username')
    # password=post_params.get('password')

    # post json
    # json_params=request.body
    # # 得到的是b'{\r\n "username":"pan",\r\n "password":"test"\r\n}'
    # # 需要解码,得到的是JSON字符串
    # body_str=json_params.decode()
    # '''
    # json模块
    # json.dumps  将字典字符转换为JSON
    # json.loads  将json转为字典
    # '''
    # json_data=json.loads(body_str)
    # username=json_data['username']

    # post meta
    # json_params = request.META['CONNECTION']

    # HttpResponse 第一个是content，传递字符串，不要传递对象和字典
    # status 是响应状态码
    # content_type 是一个MIME类型，语法形式是：大类/小类
    # application/json
    # return HttpResponse(f'{json_params}-{a}-{b}')

    # 使用jsonresponse
    # from django.http import JsonResponse
    # data={
    #     'username':'pan'
    # }
    # return JsonResponse(data)

    # 重定向
    # return redirect('https://www.baidu.com')
    # 需求跳转到首页
    # return redirect('/index/')
    # 通过reverse找路径
    path=reverse('book:index')
    return redirect(path)


    '''
    保存在客户端的叫cookie：
    cookie是基于域名（或IP）的
    保存在服务器的数据叫做session，如果浏览器禁用了cookie，session不能实现
    1.第一次请求的时候可以携带一些信息（比如用户名/密码）cookie中没有任何信息
    2.当服务器接受到请求后，进行用户名和密码的验证，验证没有问题可以设置session信息
    3.在设置session信息的同时，服务器会在相应头中设置一个session id的cookie信息
    4.浏览器在接受响应后，会将cookie信息保存起来（保存sessionid的信息）
    5.第二次及其之后的请求都会携带session id的信息；
    6.当服务器接受请球后会获取到sessionid信息，进行验证，
    
    
    '''


def set_cookie(request):
    username=request.GET.get('username')
    response=HttpResponse('set_cookie')
    response.set_cookie('username',username)
    return response

def get_cookie(request):
    # 服务器可以接受查看cookie信息
    cookie=request.COOKIES
    username=cookie.get('username')
    return HttpResponse(f'{username}')

def set_session(request):
    # 理解为字典
    user_id=666
    request.session['user_id']=user_id

    return HttpResponse('set_session')

def get_session(request):
    user_id=request.session.get('user_id')
    return HttpResponse(f'{user_id}')

'''
登录页面：
    GET请求是获取登录的页面
    POST请求是验证登录
'''

# def show_login(request):
#     return render(request)
#
# def veru_login(request):
#     return redirect('首页')

# def login(request):
#     if request.method=='GET':
#         return render(request,'register.html')
#     else:
#         return  HttpResponse('这里实现注册逻辑')

from django.views import View
# # 类视图
# class LoginView(View):
#
#     def get(self,request):
#         return render(request,'register.html')
#
#     def post(self,request):
#         return HttpResponse('写实现注册的逻辑')

# 必须要登录才能展示的实现
# from django.contrib.auth.mixins import LoginRequiredMixin
# class LoginView(LoginRequiredMixin,View):
#
#     def get(self,request):
#         return render(request,'register.html')
#
#     def post(self,request):
#         return HttpResponse('写实现注册的逻辑')

class HomeView(View):
    def get(self,request):
        # 1.获取数据
        username=request.GET.get('username')
        # 2.组织数据
        context={
            'username':username,
            'age':14,
            'birthday':datetime.now(),
            'friends':['tom','jack','rose'],
            'money':{
                '2019':12000,
                '2020':18000,
                '2021':25000,
            },
            'desc':'<script>alert("hot")</script>'
        }
        # return render(request,'detail.html')
        return render(request,'index.html',context)